package bolao.persistence;

import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import org.hibernate.Hibernate;

import bolao.entities.Aposta;

public class ApostaDAOPostgre extends DAOImpl<Aposta>{

	public static final String[] adversarios = {"coreia", "costadomarfim", "portugal"};
	public static final int apostaControleId = 1000;	
	
	public ApostaDAOPostgre() {
		super(Aposta.class);		
	}
	
	public Aposta getResultados(Aposta aposta){
		EntityManager em = emf.createEntityManager();
		aposta = em.find(Aposta.class, aposta.getId());
		Hibernate.initialize(aposta.getResultados());
		em.close();
		return aposta;
	}
	
	public List<Aposta> getVencedoresBrasil(int jogo, int golsBrasil, int golsAdversario){
		EntityManager em = emf.createEntityManager();
		EntityTransaction t = em.getTransaction();
		t.begin();
		
		Query q = em.createQuery("from Aposta as aposta where aposta.jogosBrasil.brasil" +
				jogo + " = ? and aposta.jogosBrasil." + adversarios[jogo - 1] + " = ? and" +
						" aposta.id != " + apostaControleId);
		q.setParameter(1, golsBrasil);
		q.setParameter(2, golsAdversario);
		List<Aposta> result = q.getResultList();
		t.commit();
		em.close();
		return result;
	}
	
	public List<Aposta> getClassificacao(){
		List<Aposta> result = super.getByQuery("from Aposta as aposta where " +
				"aposta.id != " + apostaControleId + " order by -aposta.pontuacao");
		return result;
	}

	@Override
	/**
	 * Remove a aposta de controle da lista de apostas retornada
	 */
	public List<Aposta> getList(){
		List<Aposta> result = super.getByQuery("from Aposta as aposta where " +
				"aposta.id != " + apostaControleId + " order by aposta.numero");
		return result;		
	}
	
	public List<Aposta> getByNumero(int numero){
		return super.getByQuery("from Aposta as aposta where aposta.numero = " + numero);
	}
	
}
